package org.xx.armory.config.service;

import org.xx.armory.config.NamedPropertiesSection;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import static org.xx.armory.commons.Validators.notNull;

/**
 * 服务相关的配置项。
 */
public final class ServiceSection {
    private final List<NamedPropertiesSection> decorators;

    public ServiceSection() {
        this.decorators = new ArrayList<>();
    }

    /**
     * 获取所有可用的修饰器配置节。
     *
     * @return 所有可用的修饰器栈配置节。
     */
    public List<NamedPropertiesSection> getDecorators() {
        return this.decorators.stream()
                              .filter(NamedPropertiesSection::isEnabled)
                              .collect(Collectors.toList());
    }

    /**
     * 添加修饰器配置节。
     *
     * @param decorator
     *         待添加的配置节。
     * @throws IllegalArgumentException
     *         如果参数{@code decorator}是{@code null}。
     */
    public void addDecorator(
            NamedPropertiesSection decorator
    ) {
        notNull(decorator, "decorator");

        if (decorator.isEnabled()) {
            this.decorators.add(decorator);
        }
    }
}
